package com.computergames.server.server.session;

import com.computergames.server.domain.ApiResponse;
import io.netty.channel.Channel;

import java.util.List;
import java.util.Set;

public interface RoomSessionService {
    /**
     * 创建一个房间, 如果不存在才能创建成功, 否则返回 null
     * @param name 房间名
     * @param members 成员
     * @return 成功时返回房间对象, 失败返回 null
     */
    Room createRoom(String name, String roomType, List<String> members);

    /**
     * 加入房间
     * @param name 房间名
     * @param member 成员名
     * @return 如果房间不存在返回 null, 否则返回房间对象
     */
    Boolean joinMember(String name, String member);

    /**
     * 移除房间成员
     * @param name 房间名
     * @param member 成员名
     * @return 如果房间不存在返回 null, 否则返回房间对象
     */
    Boolean removeMember(String name, String member);

    /**
     * 移除房间
     * @param name 房间名
     * @return 如果房间不存在返回 null, 否则返回房间对象
     */
    Boolean removeRoom(String name);

    /**
     * 获取房间成员
     * @param name 房间名
     * @return 成员集合, 如果房间不存在或没有成员会返回 empty set
     */
    Set<String> getMembers(String name);

    /**
     * 获取房间成员的 channel 集合, 只有在线的 channel 才会返回
     * @param name 房间名
     * @return 成员 channel 集合
     */
    List<Channel> getMembersChannel(String name);

    /**
     * 判断房间是否已满
     * @param name 房间名
     * @return 如果房间已满返回 true, 否则返回 false
     */
    boolean isRoomFull(String name);
}
